/* 
   Термометр с последовательной передачей данных RS232, использующий
   температурный датчик LM75 шины I2C от National Semiconductor
   
   Чип: AT90S8515
   Модель Памяти: SMALL
   Размер Стека Данных: 128 байт
   Тактовая частота: 3.6864 МГц
   Параметры связи: 9600 8N1
   
   CodeVisionAVR C Compiler
   (C) 2000-2002 HP InfoTech S.R.L.
   www.hpinfotech.ro
   
   Для того чтобы использовать разъем
   RS232 SPARE на STK500, должны быть
   сделаны следующие соединения:
   [разъем RS232 SPARE] [разъем PORTD]
   RXD                  - 1 PD0
   TXD                  - 2 PD1
   
   Для шины I2C используются биты ПОРТА A
   ПРИМЕЧАНИЕ: ДЛЯ СИГНАЛОВ SDA и SCL ШИНЫ I2C ДОЛЖНЫ
   БЫТЬ ИСПОЛЬЗОВАНЫ РЕЗИСТОРЫ 3.3k..4.7k, ПОДТЯНУТЫЕ К +5V
   
*/

#asm
   .equ __i2c_port=0x1b ;ПОРТ A
   .equ __scl_bit=0 ;SCL=STK500 РАЗЪЕМ PORTA вывод 1
   .equ __sda_bit=1 ;SDA=STK500 РАЗЪЕМ PORTA вывод 2
#endasm

// программы управления LM75
#include <lm75.h>
// функция printf
#include <stdio.h>
// Определения регистров ввода/вывода AT90S8515
#include <90s8515.h>
#include <delay.h>

void main(void)
{
   char sign;
   int temp;
   // разрешим передатчик
   UCR=8;
   // Скорость передачи=9600 при 3.6864 МГц
   UBRR=23;
   // инициализируем шину I2C
   i2c_init();
   // инициализируем LM75 чип с адресом 0
   // гистерезис температуры 20°C
   // O.S. температура 25°C
   // O.S. выход активный - высокий уровень
   lm75_init(0,20,25,1);
   // цикл передачи температуры
   while (1)
   {
      // читаем температуру LM75 *10°C
      // из чипа с адресом 0
      temp=lm75_temperature_10(0);
      sign='+';
      if (temp<0)
         {
         sign='-';
         temp=-temp;
         };
      // пошлем измеренную температуру через
      // последовательную связь RS232
      printf("t=%c%i.%u\xf8C\r\n", sign,temp/10,temp%10);
      delay_ms(200);
   }
}
